<?php
	require 'libs/csrf.php';
	require 'libs/validations.php';

	class blogController {
		private function default_route() {
			global $url_routes;

			header('Location: ' . $url_routes['home']);

			exit;
		}


		// Renderiza la página de errores,
		// '$_SESSION['error_messages']' almacena un mensaje de error.
		public function errors() {
			if (empty($_SESSION['error']))
				$this -> default_route();

			$error = $_SESSION['error'];

			unset($_SESSION['error']);

			if (is_string($error)) {
				global $url_routes, $configuration;

				$head_title = 'Error';

				require_once 'views/layouts/head.php';
				require_once 'views/layouts/navbar.php';
				require_once 'views/pages/errors.php';
				require_once 'views/layouts/footer.php';
			}
			else
				$this -> default_route();
		}


		// Valida si los campos del formulario de búsqueda no están vacíos.
		private function validate_search($form) {
			global $url_routes;

			$validations = new validations($url_routes['home']);
			$data        = $validations -> validate_form($form, array(
				array('q', 'min' => 1, 'max' => 244, 'exist' => true)
			));

			return $data['q'];	
		}


		// Elimina todas las variables de sesión, cierra la sesión de un usuario.
		public function logout() {
			session_unset();
			session_destroy();

			$this -> default_route();
		}


		// Renderiza la vista de la página principal del sitio web.
		public function home() {
			global $url_routes;

			$csrf = new csrf();

			if (empty($_POST['search_submit'])) {
				global $configuration;

				$messages = $_SESSION['messages'];

				// Agrega un token al formulario de búsqueda.
				$token = $csrf -> generateToken();

				unset($_SESSION['messages'], $csrf);

				require_once 'views/layouts/head.php';
				require_once 'views/layouts/navbar.php';
				require_once 'views/pages/home.php';
				require_once 'views/layouts/footer.php';
			}
			else {
				// Valida si el token del formulario de búsqueda es igual y vigente.
				$csrf -> validateToken($_POST['csrf']);

				$query = $this -> validate_search($_POST);

				// Realiza un búsqueda de artículos.
				header('Location: ' . $url_routes['search'] . '&q=' . urlencode($query));

				exit;
			}
		}


		// Renderiza la vista de búsquedas.
		public function search() {
			if (empty($_GET['q']))
				$this -> default_route();

			$query = $this -> validate_search($_GET);

			// Escapa todos los caracteres de una búsqueda.
			$query = htmlentities($query, ENT_COMPAT | ENT_HTML5, 'UTF-8');

			// Busca artículos en base al '$query'.
			$articles = $this -> articleFind($query);

			$head_title = 'Búsqueda';

			$messages = $_SESSION['messages'];

			// Agrega un token al formulario de búsqueda.
			$csrf  = new csrf();
			$token = $csrf -> generateToken();

			unset($_SESSION['messages'], $csrf);

			global $url_routes, $configuration;

			require_once 'views/layouts/head.php';
			require_once 'views/layouts/navbar.php';
			require_once 'views/pages/search.php';
			require_once 'views/layouts/footer.php';
		}


		// Busca artículos por título y categorías.
		private function articleFind($query) {
			//
		}
	}